package main

import "fmt"

type A struct {
	Name string
}

type B struct {
	Name string
}

type C struct {
	A
	B
}

type D struct {
	*A
	*B
}

func (d D) String() string {
	return fmt.Sprintf("D info %v %v", d.A, d.B)
}

func main() {
	// 1. 创建变量 再赋值
	c := C{}
	c.A.Name = "jack"
	c.B.Name = "Marry"
	fmt.Println(c)

	// 2. 创建时，直接给结构体赋值
	c2 := C{
		A{"jack2"},
		B{"Marry2"},
	}
	fmt.Println(c2) // {{jack2} {Marry2}}

	// 2. 指针类型 匿名结构体
	d := D{
		&A{"jack3"},
		&B{"Marry3"},
	}
	fmt.Println(d) // D info &{jack3} &{Marry3}
}
